home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE6b.s < prev    next >
Text File  |  1994-07-28  |  5KB  |  174 lines

  1.  
  2. ; Lezione6a.s    STAMPIAMO UNA RIGA DI TESTO SULLO SCHERMO!!!
  3.  
  4.     SECTION    CiriCop,CODE
  5.  
  6. Inizio:
  7.     move.l    4.w,a6        ; Execbase in a6
  8.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  9.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  10.     jsr    -$198(a6)    ; OpenLibrary
  11.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  12.     move.l    d0,a6
  13.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  14.  
  15. ;     PUNTIAMO IL NOSTRO BITPLANE
  16.  
  17.     MOVE.L    #BITPLANE,d0    ; in d0 mettiamo l'indirizzo della PIC,
  18.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  19.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  20.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  21.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  22.  
  23.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  24.     move.w    d0,$dff088        ; Facciamo partire la COP
  25.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  26.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  27.  
  28.     bsr.w    print        ; Stampa una riga di testo sullo schermo
  29.  
  30. mouse:
  31.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  32.     bne.s    mouse        ; se no, torna a mouse:
  33.  
  34.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  35.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  36.  
  37.     move.l    4.w,a6
  38.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  39.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  40.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  41.     rts            ; USCITA DAL PROGRAMMA
  42.  
  43. ;    Dati
  44.  
  45. GfxName:
  46.     dc.b    "graphics.library",0,0
  47.  
  48. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  49.     dc.l    0    ; della graphics.library
  50.  
  51. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  52.     dc.l    0
  53.  
  54. ;    Routine che stampa caratteri larghi 8x8 pixel
  55.  
  56. PRINT:
  57.     LEA    TESTO(PC),A0    ; Indirizzo del testo da stampare in a0
  58.     LEA    BITPLANE,A3    ; Indirizzo del bitplane destinazione in a3
  59.     MOVEQ    #40-1,D0    ; NUMERO COLONNE PER RIGA: 40 (ossia il numero
  60.                 ; di caratteri presenti in una riga).
  61. PRINTCHAR2:
  62.     MOVEQ    #0,D2        ; Pulisci d2
  63.     MOVE.B    (A0)+,D2    ; Prossimo carattere in d2
  64.     SUB.B    #$20,D2        ; TOGLI 32 AL VALORE ASCII DEL CARATTERE, IN
  65.                 ; MODO DA TRASFORMARE, AD ESEMPIO, QUELLO
  66.                 ; DELLO SPAZIO (che e' $20), in $00, quello
  67.                 ; DELL'ASTERISCO ($21), in $01...
  68.     MULU.W    #8,D2        ; MOLTIPLICA PER 8 IL NUMERO PRECEDENTE,
  69.                 ; essendo i caratteri alti 8 pixel
  70.     MOVE.L    D2,A2
  71.     ADD.L    #FONT,A2    ; TROVA IL CARATTERE DESIDERATO NEL FONT...
  72.  
  73.                 ; STAMPIAMO IL CARATTERE LINEA PER LINEA
  74.  
  75.     MOVE.B    (A2)+,(A3)    ; stampa LA LINEA 1 del carattere
  76.     MOVE.B    (A2)+,40(A3)    ; stampa LA LINEA 2  " "
  77.     MOVE.B    (A2)+,40*2(A3)    ; stampa LA LINEA 3  " "
  78.     MOVE.B    (A2)+,40*3(A3)    ; stampa LA LINEA 4  " "
  79.     MOVE.B    (A2)+,40*4(A3)    ; stampa LA LINEA 5  " "
  80.     MOVE.B    (A2)+,40*5(A3)    ; stampa LA LINEA 6  " "
  81.     MOVE.B    (A2)+,40*6(A3)    ; stampa LA LINEA 7  " "
  82.     MOVE.B    (A2)+,40*7(A3)    ; stampa LA LINEA 8  " "
  83.  
  84.     ADDQ.w    #1,A3        ; A3+1, avanziamo di 8 bit (PROSSIMO CARATTERE)
  85.  
  86.     DBRA    D0,PRINTCHAR2    ; STAMPIAMO D0 (40) CARATTERI PER RIGA
  87.  
  88.     RTS
  89.  
  90.  
  91.         ; numero caratteri per linea: 40
  92. TESTO:         ;          1111111111222222222233333333334
  93.          ;     1234567890123456789012345678901234567890
  94.     dc.b    ' PRIMA RIGA  Sullo Schermo! 123 prova   '
  95.  
  96.     EVEN
  97.  
  98.  
  99.  
  100.     SECTION    GRAPHIC,DATA_C
  101.  
  102. COPPERLIST:
  103.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  104.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  105.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  106.     dc.w    $13e,$0000
  107.  
  108.     dc.w    $8E,$2c81    ; DiwStrt
  109.     dc.w    $90,$2cc1    ; DiwStop
  110.     dc.w    $92,$0038    ; DdfStart
  111.     dc.w    $94,$00d0    ; DdfStop
  112.     dc.w    $102,0        ; BplCon1
  113.     dc.w    $104,0        ; BplCon2
  114.     dc.w    $108,0        ; Bpl1Mod
  115.     dc.w    $10a,0        ; Bpl2Mod
  116.             ; 5432109876543210
  117.     dc.w    $100,%0001001000000000    ; 1 bitplane LOWRES 320x256
  118.  
  119. BPLPOINTERS:
  120.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  121.  
  122.     dc.w    $0180,$000    ; color0 - SFONDO
  123.     dc.w    $0182,$19a    ; color1 - SCRITTE
  124.  
  125.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  126.  
  127. ;    Il FONT caratteri 8x8
  128.  
  129. FONT:
  130. ;    incbin    "metal.fnt"    ; Carattere largo
  131. ;    incbin    "normal.fnt"    ; Simile ai caratteri kickstart 1.3
  132.     incbin    "nice.fnt"    ; Carattere stretto
  133.  
  134.     SECTION    MIOPLANE,BSS_C    ; Le SECTION BSS devono essere fatte di
  135.                 ; soli ZERI!!! si usa il DS.b per definire
  136.                 ; quanti zeri contenga la section.
  137.  
  138. BITPLANE:
  139.     ds.b    40*256    ; un bitplane lowres 320x256
  140.  
  141.     end
  142.  
  143. In una riga si possono scrivere molte cose. Per stampare 40 caratteri basta
  144. fare un ciclo DBRA, qua chiamato PRINTCHAR2:
  145.  
  146.     MOVEQ    #40-1,D0    ; NUMERO COLONNE PER RIGA: 40
  147. PRINTCHAR2:
  148.  
  149. Essendo ogni carattere "largo" un byte, in una colonna ci possono essere 40
  150. caratteri in LOWRES, o 80 in HIRES. Prima di rifare il ciclo per stampare
  151. il prossimo carattere c'e' un ADD che sposta al prossimo byte, ossia alla
  152. posizione seguente dove stampare il carattere adiacente:
  153.  
  154.     ADDQ.w    #1,A3        ; A1+1, avanziamo di 8 bit (PROSSIMO CARATTERE)
  155.  
  156.     DBRA    D0,PRINTCHAR2    ; STAMPIAMO D0 (40) CARATTERI PER RIGA
  157.  
  158. Potete scegliere tra 3 font diversi, basta togliere e mettere i ; agli incbin
  159. per caricare quello che vi interessa.
  160.  
  161. Se volete visualizzare la linea in hires eseguite le modifiche come nella
  162. Lezione6a.s, in piu' potete "allungare" il testo fino ad 80 caratteri, in
  163. questo caso dovete modificare il loop PRINTCHAR in MOVEQ #80-1,d0.
  164. Il testo lo potete anche scrivere in due linee per ogni riga:
  165.  
  166.     dc.b    ' PRIMA RIGA  Sullo Schermo! 123 prova   ' 0-40
  167.     dc.b    ' sono sempre sulla prima riga hires!!   ' 41-80
  168.  
  169.     dc.b    " SECONDA RIGA!.........................."
  170.     dc.b    "........................................"
  171.  
  172.     dc.b    " TERZA RIGA!...... eccetera.
  173.  
  174.